/**
 * 扩展jqGrid js.
 * 
 * 包含默认配置, 查询扩展.
 * 
 * @author 潘瑞峥
 * @date 2013-06-04
 */
( function( $ ) {
	/**
	 * jqGrid默认配置.
	 * 
	 * jqGrid开放对该对象进行默认设置, 先读取默认配置, 再用自定义参数覆盖配置, 再加载jqGrid.
	 */
	$.extend( true, $.jgrid.defaults, {
		datatype: 'json',
		mtype: 'POST',
		// 自动宽度.
		autowidth: true,
		height: 330,
		// 一页10条记录.
		rowNum: 10,
		pager: '#pager',
		pginput: false,
		rownumbers: true,
		viewrecords: true,
		// json映射.
		jsonReader: {
			// id.
			id: 'id',
			// list.
			root: 'content',
			// 当前页码.
			page: 'number',
			// 每页条数.
			rows: 'size',
			// 总页数.
			total: 'totalPages',
			// 总记录数.
			records: 'totalElements',
			// 去掉重复值.
			repeatitems: false
		},
		// 传入后台的参数映射.
		prmNames: {
			page: 'pageable.page',
			rows: 'pageable.size'
		}
	} );

	/**
	 * 基于jQuery-jqGrid, 该方法防止参数为中文乱码问题, 在Grid的mtype方法必须设置为'POST'.
	 * 
	 * 先获取form值, 在获取grid原来参数, 若直接传入form会覆盖分页等条件, 所以还需找到Grid原参数, 并合并两参数, 重新给Grid.
	 */
	$.getGridData = function( formSelector, $grid ) {
		var formParams = {};
		/* 循环Form的值. */
		$( $( formSelector ).serializeArray() ).each( function() {
			formParams[ this.name ] = this.value;
		} );
		/* Grid原参数. */
		var gridParams = $grid.jqGrid( 'getGridParam', 'postData' );
		var params = $.extend( true, {}, gridParams, formParams );
		return params;
	};

	/**
	 * 扩展jqGrid查询.
	 * 
	 * 将复杂的查询方法简化.
	 */
	$.jgrid.extend( {
		query: function( formSelector ) {
			var $grid = this;
			var url = $grid.getGridParam( 'url' );
			var postData = $.getGridData( formSelector, $grid );
			$grid.jqGrid( 'setGridParam', {
				url: url,
				page: 1,
				postData: postData
			} ).trigger( 'reloadGrid' );
		}
	} );

} )( jQuery );